package dao;

import java.util.List;

import javax.persistence.EntityManager;
import javax.persistence.EntityTransaction;
import javax.persistence.criteria.CriteriaQuery;

import model.Funcionario;

import util.JPAUtil;

public class FuncionarioDAO {
	public void insert(Funcionario funcionario) {

		EntityManager em = JPAUtil.getEntityManager();
		EntityTransaction tx = em.getTransaction();
		tx.begin();
		em.persist(funcionario);
		tx.commit();
		em.clear();
	}

	public void update(Funcionario funcionario) {

		EntityManager em = JPAUtil.getEntityManager();
		EntityTransaction tx = em.getTransaction();
		tx.begin();
		em.merge(funcionario);
		tx.commit();
		em.clear();
	}

	public void delete(Funcionario funcionario) {

		EntityManager em = JPAUtil.getEntityManager();
		EntityTransaction tx = em.getTransaction();
		tx.begin();
		em.remove(em.merge(funcionario));
		tx.commit();
		em.clear();
	}

	public List<Funcionario> selectAll() {

		EntityManager em = JPAUtil.getEntityManager();
		CriteriaQuery<Funcionario> query = em.getCriteriaBuilder().createQuery(
				Funcionario.class);
		query.select(query.from(Funcionario.class));

		List<Funcionario> lista = em.createQuery(query).getResultList();

		em.close();
		return lista;
	}

	public Funcionario searchById(Long value) {
		List<Funcionario> lsFuncionarios = selectAll();
		Funcionario funcionario = new Funcionario();
		for (Funcionario f : lsFuncionarios) {

			if (f.getId() == value) {
				funcionario = f;
				break;
			}
		}

		return funcionario;
	}

	public Funcionario getByName(String name) {
		List<Funcionario> lsFuncionarios = selectAll();
		Funcionario funcionario = new Funcionario();
		for (Funcionario f : lsFuncionarios) {

			if (f.getNome().equals(name)) {
				funcionario = f;
				break;
			}
		}

		return funcionario;
	}

}
